This analysis uses Global Fishign Watch data to examine the amount of fishing effort that occurs within the areas being considered for protection in Southern Argentina (Fig 1). This area is located withing the EEZ west of 65º and extends from 12-200 nm from shore (Figure 1)

Figure 1. Areas being considered for protection

Figure 1. Areas being considered for protection

All effort in Argentina EEZ

Parsed with column specification:
cols(
  year = col_integer(),
  mmsi = col_integer(),
  on_fishing_list = col_logical(),
  on_fishing_list_nn = col_logical(),
  flag_country_name = col_character(),
  flag_iso3 = col_character(),
  known_label = col_character(),
  inferred_label_allyears = col_character(),
  inferred_sublabel_allyears = col_character(),
  length = col_double(),
  tonnage = col_double(),
  engine_power = col_double(),
  days = col_integer(),
  hours = col_double(),
  fishing_days = col_integer(),
  fishing_hours = col_double(),
  fishing_kwh = col_double()
)

Between 2014-2016, we observed a total of 784 vessels fishing within Argentina’s EEZ. Of these, 298 are Argentinian flagged vessels, which accounted for 93% of all fishing effort measured in Kilowatt hours (Table 1). The foreign vessels representing the rest of the fishing effort are predominantly from Chile, Uruguay, China, South Korea and Taiwan (Figure 1). The largest Argentinian fleet excerting most of the fishing effort are trawlers, followed by longliners and squid jiggers (Table 3). In terms of the foreign fleets, the most predominant ones are Uruguyan trawlers and Chinese squid jiggers (Table 3).

Year Total vessels Argentinian vessels Total fishing days Argentinian fishing days Fishing energy (million KWh) Argentina fishing energy (million KWh)
2014 516 232 38512 26100 1007 693
2015 599 249 43409 28139 1083 720
2016 622 261 40892 30019 1011 732

Gear type Vessels Fishing days Fishing energy (million KWh)
trawlers 208 24270 618.49
drifting_longlines 21 2737 52.55
squid_jigger 14 1478 32.13
fixed_gear 7 923 14.65
other_fishing 2 280 8.90
purse_seines 3 161 4.21
Flag Country Gear type Vessels Fishing days Fishing energy (million KWh)
Falkland Islands trawlers 15 2335 126.78
Spain trawlers 21 1954 48.55
Uruguay trawlers 44 2522 33.68
Taiwan squid_jigger 31 494 12.13
China squid_jigger 117 1478 11.76
South Korea trawlers 8 169 9.59
Taiwan drifting_longlines 14 282 8.77
United Kingdom trawlers 1 148 7.19
Falkland Islands drifting_longlines 1 215 5.71
Taiwan purse_seines 6 117 3.19

Fishing effort in Argentina’s EEZ is concentrated in the central offshore region between 40 and 50º S (Figure 2). Additionally, relatively little fishing activity is observable south of 55º South. Regarding foreign fleets, Uruguay fishes predominalty in the northern region of the EEZ within the Argentine-Uruguayan Common Fishing Zone (ZCPAU), Chile’s fleet operates in the South West boundary of the EEZ and in the edge on the EEZ in the central region. China’s activity is less concentrated but occurs generally in the central and northern portion of the EEZ (Figure 3)

Reading layer `falklands_eez' from data source `/Users/JuanMayorga/github/Argentina/eez/falklands_eez.shp' using driver `ESRI Shapefile'
Simple feature collection with 1 feature and 14 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -65.00393 ymin: -56.24547 xmax: -52.31144 ymax: -47.68011
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
Parsed with column specification:
cols(
  lat_bin_center = col_double(),
  lon_bin_center = col_double(),
  flag_country_name = col_character(),
  flag_iso3 = col_character(),
  known_label = col_character(),
  inferred_label_allyears = col_character(),
  inferred_sublabel_allyears = col_character(),
  fishing_days = col_integer(),
  fishing_hours = col_double(),
  fishing_kwh = col_double()
)
128 tiles needed, this may take a while (try a smaller zoom).
Source : https://maps.googleapis.com/maps/api/staticmap?center=-45,-55&zoom=4&size=640x640&scale=2&maptype=satellite
Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Fishing effort by Argentina’s trawlers fleet is ubiquitious throughout the EEZ with little effort observed south of 55ºS. Drifting longliners present a similarly spread distribution but are slighlyt more concentrated in the central region of the EEZ. Effort by the purse seine fleet is limited to a small region in the center of the EEZ and the squid jigging fleet operates predomintnaly north of 47ºS (Figure 4). With the exception of the Uruguayan trawlers, fishing effort by foreign fleets shows a more disperse distribution with some hotspots located in the central East and South West edges of the EEZ. (Figure 5.)

Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Effort within the considered Drake MPA

Reading layer `drake' from data source `/Users/JuanMayorga/github/Argentina/eez/drake.shp' using driver `ESRI Shapefile'
Simple feature collection with 1 feature and 1 field
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -67.26667 ymin: -58.4046 xmax: -64.00517 ymax: -54.94609
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
Reading layer `south_section_eez' from data source `/Users/JuanMayorga/github/Argentina/eez/south_section_eez.shp' using driver `ESRI Shapefile'
Simple feature collection with 1 feature and 14 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -68.64218 ymin: -58.4046 xmax: -61.00579 ymax: -54.39979
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
Parsed with column specification:
cols(
  year = col_integer(),
  timestamp = col_datetime(format = ""),
  lat = col_double(),
  lon = col_double(),
  mmsi = col_integer(),
  flag_country_name = col_character(),
  flag_iso3 = col_character(),
  known_label = col_character(),
  inferred_label_allyears = col_character(),
  inferred_sublabel_allyears = col_character(),
  b_engine_power = col_double(),
  nnet_score = col_integer(),
  hours = col_double()
)

Within the considered Drake Marine Protected Area, we are able to observe 12 vessels fishing between 2014-2016. Of these, 5 Argentinian vessels (4 trawlers and 1 longliner) account for 99.0112056 of all observed effort (Table 4). Two Chilean vessels and one Korean vessel account for less than 1% of the effort and collectively spent only 7 fishing days in 2016 (Table 4).

Year Total vessels Argentinian vessels Total fishing days Argentinian fishing days Fishing energy (million KWh) Argentina fishing energy (million KWh)
2014 9 5 91 80 1.52 1.49
2015 7 5 230 226 4.02 4.01
2016 8 5 153 146 1.93 1.90
Flag state Gear type Vessels Fishing days Fishing energy (thousand KWh)
Argentina trawlers 4 115 1553.63
Argentina drifting_longlines 1 31 348.71
Chile trawlers 1 2 12.22
South Korea drifting_longlines 1 3 8.00
Chile drifting_longlines 1 2 5.99

These results suggest that a very small fraction of Argentina’s fleet operates in the area considered for protection. Specifically, only 1.9138756 % of all Argentinian trawlers and 4.7619048 % of longliners fish in the region. The effort by these vessels represents only 0.2511952 % and 0.6635399 % of all effort by Argentian trawlers and longliners, respectively.

Joining, by = c("year", "inferred_label_allyears")
Year Gear type All vessels in EEZ Vessels in Drake % of vessels All fishing energy in EEZ Fishing energy in Drake % fishing energy
2014 drifting_longlines 12 1 8.33 31.06 0.31 1.00
2014 trawlers 195 5 2.56 626.28 1.18 0.19
2015 drifting_longlines 14 1 7.14 40.56 1.11 2.74
2015 trawlers 204 4 1.96 628.05 2.90 0.46
2016 drifting_longlines 21 1 4.76 52.55 0.35 0.67
2016 trawlers 209 4 1.91 618.50 1.55 0.25
Source : https://maps.googleapis.com/maps/api/staticmap?center=-56.6,-64.5&zoom=7&size=640x640&scale=2&maptype=satellite
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Overlap effor map with all MPAs

Reading layer `AMPs_5_v1' from data source `/Users/JuanMayorga/github/Argentina/AMPS_shapefiles/AMPs_5_v1.shp' using driver `ESRI Shapefile'
Simple feature collection with 14 features and 6 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -67.26759 ymin: -58.99964 xmax: -54.76844 ymax: -38.92475
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateRegions defined for each Polygons
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

LS0tCnRpdGxlOiAiQW5hbHlzaXMgb2YgZmlzaGluZyBlZmZvcnQgaW4gdGhlIHByb3Bvc2VkIHByb3RlY3RlZCBhcmVhcyBpbiBBcmdlbnRpbmEiCm91dHB1dDoKICB3b3JkX2RvY3VtZW50OgogIGh0bWxfbm90ZWJvb2s6CiAgICBmaWdfY2FwdGlvbjogeWVzCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RiwgZWNobz1GQUxTRSwgcHJvbXB0PUZBTFNFfQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMoCiAgZWFzeXBhY2thZ2VzOjpsaWJyYXJpZXMoImtuaXRyIiwgInRpZHl2ZXJzZSIsICJiaWdycXVlcnkiLCAibHVicmlkYXRlIiwgImJyb29tIiwibW9kZWxyIiwgIkRCSSIsICJ0cmVsbGlzY29wZWpzIiwgICJjb3dwbG90IiwgImd0YWJsZSIsICJncmlkIiwgImdnc2NpIiwgInN0cmluZ3IiLCAibXJlZ2lvbnMiLCAic2YiLCAiZ3JpZCIsICJncmlkRXh0cmEiLCAiZ2dtYXAiKQopCgprbml0cjo6b3B0c19jaHVuayRzZXQod2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGNvbW1lbnQgPSBGLGVycm9yID0gRkFMU0UsIGVjaG8gPSBGQUxTRSwgcHJvZ3Jlc3MgPSBGKQoKa25pdHI6OmtuaXRfaG9va3Mkc2V0KGlubGluZSA9IGZ1bmN0aW9uKHgpIHsKICBwcmV0dHlOdW0ocm91bmQoeCwyKSwgYmlnLm1hcmsgPSAiLCIpCn0pCgpCUV9jb25uZWN0aW9uIDwtICBkYkNvbm5lY3QoZGJpX2RyaXZlcigpLCBkYXRhc2V0ID0gIiIsIHByb2plY3QgPSAid29ybGQtZmlzaGluZy04MjciKQoKc291cmNlKCJnZndfdGhlbWVzLlIiKQpgYGAKClRoaXMgYW5hbHlzaXMgdXNlcyBHbG9iYWwgRmlzaGlnbiBXYXRjaCBkYXRhIHRvIGV4YW1pbmUgdGhlIGFtb3VudCBvZiBmaXNoaW5nIGVmZm9ydCB0aGF0IG9jY3VycyB3aXRoaW4gdGhlIGFyZWFzIGJlaW5nIGNvbnNpZGVyZWQgZm9yIHByb3RlY3Rpb24gaW4gU291dGhlcm4gQXJnZW50aW5hIChGaWcgMSkuIFRoaXMgYXJlYSBpcyBsb2NhdGVkIHdpdGhpbmcgdGhlIEVFWiB3ZXN0IG9mIDY1wrogYW5kIGV4dGVuZHMgZnJvbSAxMi0yMDAgbm0gZnJvbSBzaG9yZSAoRmlndXJlIDEpIAoKIVtGaWd1cmUgMS4gQXJlYXMgYmVpbmcgY29uc2lkZXJlZCBmb3IgcHJvdGVjdGlvbl0oY29uc2lkZXJlZF9hcmVhcy5qcGcpCgojIEFsbCBlZmZvcnQgaW4gQXJnZW50aW5hIEVFWgoKYGBge3NxbCBjb25uZWN0aW9uID0gQlFfY29ubmVjdGlvbiwgb3V0cHV0LnZhciA9ICJhbGxfZWZmb3J0X2luX0VFWiIsIGV2YWwgPSBGQUxTRX0KU0VMRUNUCiAgYS55ZWFyIHllYXIsCiAgYS5tbXNpIG1tc2ksCiAgYi5vbl9maXNoaW5nX2xpc3Qgb25fZmlzaGluZ19saXN0LAogIGIub25fZmlzaGluZ19saXN0X25uIG9uX2Zpc2hpbmdfbGlzdF9ubiwKICBiLmZsYWdfY291bnRyeV9uYW1lIGZsYWdfY291bnRyeV9uYW1lLAogIGIuZmxhZ19pc28zIGZsYWdfaXNvMywKICBiLmtub3duX2xhYmVsIGtub3duX2xhYmVsLAogIGIuaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgYi5pbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycyBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICBiLmxlbmd0aCBsZW5ndGgsCiAgYi50b25uYWdlIHRvbm5hZ2UsCiAgYi5lbmdpbmVfcG93ZXIgZW5naW5lX3Bvd2VyLAogIEVYQUNUX0NPVU5UX0RJU1RJTkNUKERBVEUodGltZXN0YW1wKSkgZGF5cywKICBTVU0oYS5ob3VycykgaG91cnMsCiAgRVhBQ1RfQ09VTlRfRElTVElOQ1QoSUYoYS5ubmV0X3Njb3JlID09IDEsIERBVEUodGltZXN0YW1wKSwgTlVMTCkpIGZpc2hpbmdfZGF5cywKICBTVU0oSUYoYS5ubmV0X3Njb3JlID09IDEsIGEuaG91cnMsIDApKSBmaXNoaW5nX2hvdXJzLAogIFNVTShJRihhLm5uZXRfc2NvcmUgPT0gMSwgYS5ob3VycypiLmVuZ2luZV9wb3dlciwgMCkpIGZpc2hpbmdfa3doCkZST00gKAogIFNFTEVDVAogICAgWUVBUih0aW1lc3RhbXApIHllYXIsCiAgICBtbXNpLAogICAgdGltZXN0YW1wLAogICAgc2VnX2lkLAogICAgbG9uLAogICAgbGF0LAogICAgaG91cnMsCiAgICBubmV0X3Njb3JlLAogICAgZWV6X25hbWUKICBGUk9NCiAgICBbd29ybGQtZmlzaGluZy04Mjc6Z2Z3X3Jlc2VhcmNoLm5uXQogIFdIRVJFCiAgICBfUEFSVElUSU9OVElNRSBCRVRXRUVOIFRJTUVTVEFNUCgnMjAxNC0wMS0wMScpCiAgICBBTkQgVElNRVNUQU1QKCcyMDE2LTEyLTMxJykKICAgIEFORCAoZWV6X25hbWUgPT0gIkFyZ2VudGluYSIgT1IgZWV6X25hbWUgPT0gIkZhbGtsYW5kIElzbGFuZHMiKQogICAgQU5EIHNlZ19pZCBJTiAoU0VMRUNUIHNlZ19pZCBGUk9NIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2guZ29vZF9zZWdtZW50c10pCiAgICApIGEKSU5ORVIgSk9JTiAoCiAgU0VMRUNUCiAgICBtbXNpLAogICAgeWVhciwKICAgIG9uX2Zpc2hpbmdfbGlzdCwKICAgIG9uX2Zpc2hpbmdfbGlzdF9ubiwKICAgIGNvdW50cnlfbmFtZSBmbGFnX2NvdW50cnlfbmFtZSwKICAgIGlzbzMgZmxhZ19pc28zLAogICAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgICBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICAgIGtub3duX2xhYmVsLAogICAgSUYoa25vd25fbGVuZ3RoIElTIE5PVCBOVUxMLCBrbm93bl9sZW5ndGgsIGluZmVycmVkX2xlbmd0aCApIGxlbmd0aCwKICAgIElGKGtub3duX3Rvbm5hZ2UgSVMgTk9UIE5VTEwsIGtub3duX3Rvbm5hZ2UsIGluZmVycmVkX3Rvbm5hZ2UgKSB0b25uYWdlLAogICAgSUYoa25vd25fZW5naW5lX3Bvd2VyIElTIE5PVCBOVUxMLCBrbm93bl9lbmdpbmVfcG93ZXIsIGluZmVycmVkX2VuZ2luZV9wb3dlciApIGVuZ2luZV9wb3dlcgogIEZST00KICAgIFtnZndfcmVzZWFyY2gudmVzc2VsX2luZm9fMjAxNzA3MTddCiAgV0hFUkUKICAgIChvbl9maXNoaW5nX2xpc3Rfbm4KICAgICAgT1Igb25fZmlzaGluZ19saXN0KQogICAgQU5EIG9mZnNldHRpbmcgSVMgTlVMTCliCk9OCiAgYS5tbXNpID0gYi5tbXNpCiAgQU5EIGEueWVhciA9IGIueWVhcgpHUk9VUCBCWQogIHllYXIsCiAgbW1zaSwKICBvbl9maXNoaW5nX2xpc3QsCiAgb25fZmlzaGluZ19saXN0X25uLCAKICBmbGFnX2NvdW50cnlfbmFtZSwKICBmbGFnX2lzbzMsCiAga25vd25fbGFiZWwsCiAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMsCiAgbGVuZ3RoLAogIHRvbm5hZ2UsCiAgZW5naW5lX3Bvd2VyCiAgaGF2aW5nIGZpc2hpbmdfaG91cnMgPiAwCmBgYAoKYGBge3IsIGV2YWwgPSBGQUxTRX0Kd3JpdGVfY3N2KGFsbF9lZmZvcnRfaW5fRUVaLCAic2F2ZWRfZmlsZXMvYWxsX2VmZm9ydF9pbl9FRVouY3N2IikKYGBgCgpgYGB7cn0KYWxsX2VmZm9ydF9pbl9FRVogPC0gcmVhZF9jc3YoInNhdmVkX2ZpbGVzL2FsbF9lZmZvcnRfaW5fRUVaLmNzdiIpCmBgYAoKQmV0d2VlbiAyMDE0LTIwMTYsIHdlIG9ic2VydmVkIGEgdG90YWwgb2YgYHIgbl9kaXN0aW5jdChhbGxfZWZmb3J0X2luX0VFWiRtbXNpKWAgdmVzc2VscyBmaXNoaW5nIHdpdGhpbiBBcmdlbnRpbmEncyBFRVouIE9mIHRoZXNlLCBgciBuX2Rpc3RpbmN0KGZpbHRlcihhbGxfZWZmb3J0X2luX0VFWixmbGFnX2lzbzMgPT0gIkFSRyIpJG1tc2kpYCBhcmUgQXJnZW50aW5pYW4gZmxhZ2dlZCB2ZXNzZWxzLCB3aGljaCBhY2NvdW50ZWQgZm9yIDkzJSBvZiBhbGwgZmlzaGluZyBlZmZvcnQgbWVhc3VyZWQgaW4gS2lsb3dhdHQgaG91cnMgKFRhYmxlIDEpLiBUaGUgZm9yZWlnbiB2ZXNzZWxzIHJlcHJlc2VudGluZyB0aGUgcmVzdCBvZiB0aGUgZmlzaGluZyBlZmZvcnQgYXJlIHByZWRvbWluYW50bHkgZnJvbSBDaGlsZSwgVXJ1Z3VheSwgQ2hpbmEsIFNvdXRoIEtvcmVhIGFuZCBUYWl3YW4gKEZpZ3VyZSAxKS4gVGhlIGxhcmdlc3QgQXJnZW50aW5pYW4gZmxlZXQgZXhjZXJ0aW5nIG1vc3Qgb2YgdGhlIGZpc2hpbmcgZWZmb3J0IGFyZSB0cmF3bGVycywgZm9sbG93ZWQgYnkgbG9uZ2xpbmVycyBhbmQgc3F1aWQgamlnZ2VycyAoVGFibGUgMykuIEluIHRlcm1zIG9mIHRoZSBmb3JlaWduIGZsZWV0cywgdGhlIG1vc3QgcHJlZG9taW5hbnQgb25lcyBhcmUgVXJ1Z3V5YW4gdHJhd2xlcnMgYW5kIENoaW5lc2Ugc3F1aWQgamlnZ2VycyAoVGFibGUgMykuCgpgYGB7ciB9CmFsbF9lZmZvcnRfaW5fRUVaJGZsYWdfY291bnRyeV9uYW1lW2FsbF9lZmZvcnRfaW5fRUVaJGZsYWdfY291bnRyeV9uYW1lID09ICJJbnZhbGlkIE1NU0kiXSA8LSAiVW5rbm93biIKCmFsbF9lZmZvcnRfaW5fRUVaJGluZmVycmVkX2xhYmVsX2FsbHllYXJzW2FsbF9lZmZvcnRfaW5fRUVaJG1tc2kgPT0gNDcwMTQwODEwXSA8LSAidHJhd2xlcnMiCmFsbF9lZmZvcnRfaW5fRUVaJGluZmVycmVkX3N1YmxhYmVsX2FsbHllYXJzW2FsbF9lZmZvcnRfaW5fRUVaJG1tc2kgPT0gNDcwMTQwODEwXSA8LSAidHJhd2xlcnMiCmFsbF9lZmZvcnRfaW5fRUVaJGZsYWdfY291bnRyeV9uYW1lW2FsbF9lZmZvcnRfaW5fRUVaJG1tc2kgPT0gNDcwMTQwODEwXSA8LSAiQXJnZW50aW5hIgphbGxfZWZmb3J0X2luX0VFWiRmbGFnX2lzbzNbYWxsX2VmZm9ydF9pbl9FRVokbW1zaSA9PSA0NzAxNDA4MTBdIDwtICJBUkciCgoKYWxsX2VmZm9ydF9pbl9FRVogJT4lCiAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPiAxKSAlPiUgCiAgZ3JvdXBfYnkoeWVhcikgJT4lIAogIHN1bW1hcmlzZShhbGxfdmVzc2VscyA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGFyZ192ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpW2ZsYWdfaXNvMyA9PSAiQVJHIl0pLAogICAgICAgICAgICBmaXNoaW5nX2RheXNfYWxsID0gc3VtKGZpc2hpbmdfZGF5cyksCiAgICAgICAgICAgIGZpc2hpbmdfZGF5c19hcmcgPSBzdW0oZmlzaGluZ19kYXlzW2ZsYWdfY291bnRyeV9uYW1lID09ICdBcmdlbnRpbmEnXSksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doLCBuYS5ybSA9IFQpLzEwXjYpLAogICAgICAgICAgICBmaXNoaW5nX2VuZXJneV9hcmcgPSByb3VuZChzdW0oZmlzaGluZ19rd2hbZmxhZ19jb3VudHJ5X25hbWUgPT0gJ0FyZ2VudGluYSddKS8xMF42KSkgJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgMS4gRmlzaGluZyB2ZXNzZWxzIGFuZCBGaXNoaW5nIGRheXMgaW4gQXJnZW50aW5hJ3MgRUVaICgyMDE0LTIwMTYpIiwKICAgICAgICBjb2wubmFtZXMgPSBjKCJZZWFyIiwgIlRvdGFsIHZlc3NlbHMiLCAiQXJnZW50aW5pYW4gdmVzc2VscyIsICJUb3RhbCBmaXNoaW5nIGRheXMiLCAiQXJnZW50aW5pYW4gZmlzaGluZyBkYXlzIiwgIkZpc2hpbmcgZW5lcmd5IChtaWxsaW9uIEtXaCkiLCAiQXJnZW50aW5hIGZpc2hpbmcgZW5lcmd5IChtaWxsaW9uIEtXaCkiKSkKYGBgCgoKYGBge3IgZmlnLmNhcCA9ICJGaWd1cmUgMS4gTnVtYmVyIG9mIGZpc2hpbmcgdmVzc3NlbHMgYW5kIHRvdGFsIGZpc2hpbmcgZW5lcmd5IHNwZW50IChtaWxsaW9uIEtXaCkgYnkgZmxhZyBzdGF0ZSBpbiAyMDE2In0KKGJhcl9wbG90X2J5X2NvdW50cnkgPC0gYWxsX2VmZm9ydF9pbl9FRVogJT4lCiAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPiAxICYgeWVhciA9PSAyMDE2KSAlPiUKICBncm91cF9ieShmbGFnX2NvdW50cnlfbmFtZSkgJT4lIAogIHN1bW1hcmlzZSh2ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgZmlzaGluZ19lbmVyZ3kgPSBzdW0oZmlzaGluZ19rd2gpLzEwXjYpICU+JSAKICB0b3Bfbig4LHZlc3NlbHMpICU+JQogIGdhdGhlcih2YXJpYWJsZSwgdmFsdWUsIC1mbGFnX2NvdW50cnlfbmFtZSkgJT4lIAogIGdncGxvdChhZXMoeCA9IGZvcmNhdHM6OmZjdF9yZW9yZGVyKGZsYWdfY291bnRyeV9uYW1lLCB2YWx1ZSksIHkgPSB2YWx1ZSwgZmlsbCA9IHZhcmlhYmxlKSkrCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSsKICBndWlkZXMoZmlsbCA9IEZBTFNFKSArCiAgY29vcmRfZmxpcCgpKwogIGxhYnMoeSA9ICJWZXNzZWxzIiwgeCA9ICIiKSsKICBmYWNldF93cmFwKCJ2YXJpYWJsZSIsIHNjYWxlcyA9ICdmcmVlJykpKwogIHNjYWxlX2ZpbGxfbnBnKCkKCnRpZmYoInNhdmVkX3Bsb3RzL2Jhcl9wbG90X2J5X2NvdW50cnkudGlmZiIsIGhlaWdodCA9IDEyLCB3aWR0aCA9IDIwLCB1bml0cyA9ICdjbScsIGNvbXByZXNzaW9uID0gImx6dyIsIHJlcyA9IDMwMCkKICAgIApwcmludChiYXJfcGxvdF9ieV9jb3VudHJ5KQogICAgCmludmlzaWJsZShkZXYub2ZmKCkpCmBgYAoKCmBgYHtyfQphbGxfZWZmb3J0X2luX0VFWiAlPiUKICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+IDEgJiB5ZWFyID09IDIwMTYgJiBmbGFnX2NvdW50cnlfbmFtZSA9PSAiQXJnZW50aW5hIiAmICFpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyAlaW4lIGMoInJlZWZlciIsImNhcmdvX29yX3RhbmtlciIsICJ0YW5rZXIiLCAiY2FyZ28iKSAmICFpcy5uYShpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykpICU+JQogIHNlbGVjdCgtZmxhZ19jb3VudHJ5X25hbWUpICU+JSAKICBncm91cF9ieShpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogIHN1bW1hcmlzZSh2ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzID0gc3VtKGZpc2hpbmdfZGF5cyksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF42LCBkaWdpdHMgPSAyKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgdG9wX24oMTAsIGZpc2hpbmdfZW5lcmd5KSAlPiUgCiAgYXJyYW5nZShkZXNjKGZpc2hpbmdfZW5lcmd5KSkgJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgMi4gRmlzaGluZyB2ZXNzZWxzIGFuZCBlZmZvcnQgYnkgZ2VhciB0eXBlIGZvciBBcmdlbnRpbmEncyBmbGVldCAoMjAxNikiLAogICAgICAgIGNvbC5uYW1lcyA9IGMoIkdlYXIgdHlwZSIsICJWZXNzZWxzIiwgIkZpc2hpbmcgZGF5cyIsIkZpc2hpbmcgZW5lcmd5IChtaWxsaW9uIEtXaCkiKSkKCmFsbF9lZmZvcnRfaW5fRUVaICU+JQogIGZpbHRlcihmaXNoaW5nX2hvdXJzID4gMSAmIHllYXIgPT0gMjAxNiAmIGZsYWdfY291bnRyeV9uYW1lICE9ICJBcmdlbnRpbmEiICYgIWluZmVycmVkX3N1YmxhYmVsX2FsbHllYXJzICVpbiUgYygicmVlZmVyIiwiY2FyZ29fb3JfdGFua2VyIiwgInRhbmtlciIsICJjYXJnbyIpKSAlPiUKICBncm91cF9ieShmbGFnX2NvdW50cnlfbmFtZSwgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpc2UodmVzc2VscyA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGZpc2hpbmdfZGF5cyA9IHN1bShmaXNoaW5nX2RheXMpLAogICAgICAgICAgICBmaXNoaW5nX2VuZXJneSA9IHJvdW5kKHN1bShmaXNoaW5nX2t3aCkvMTBeNiwgZGlnaXRzID0gMikpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHRvcF9uKDEwLCBmaXNoaW5nX2VuZXJneSkgJT4lIAogIGFycmFuZ2UoZGVzYyhmaXNoaW5nX2VuZXJneSkpJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgMy4gRmlzaGluZyB2ZXNzZWxzIGFuZCBlZmZvcnQgYnkgZ2VhciB0eXBlIGZvciBmb3JlaWduIGZsZWV0ICgyMDE2KSIsCiAgICAgICAgY29sLm5hbWVzID0gYygiRmxhZyBDb3VudHJ5IiwiR2VhciB0eXBlIiwgIlZlc3NlbHMiLCAiRmlzaGluZyBkYXlzIiwiRmlzaGluZyBlbmVyZ3kgKG1pbGxpb24gS1doKSIpKQpgYGAKCkZpc2hpbmcgZWZmb3J0IGluIEFyZ2VudGluYSdzIEVFWiBpcyBjb25jZW50cmF0ZWQgaW4gdGhlIGNlbnRyYWwgb2Zmc2hvcmUgcmVnaW9uIGJldHdlZW4gNDAgYW5kIDUwwrogUyAoRmlndXJlIDIpLiBBZGRpdGlvbmFsbHksIHJlbGF0aXZlbHkgbGl0dGxlIGZpc2hpbmcgYWN0aXZpdHkgaXMgb2JzZXJ2YWJsZSBzb3V0aCBvZiA1NcK6IFNvdXRoLiBSZWdhcmRpbmcgZm9yZWlnbiBmbGVldHMsIFVydWd1YXkgZmlzaGVzIHByZWRvbWluYWx0eSBpbiB0aGUgbm9ydGhlcm4gcmVnaW9uIG9mIHRoZSBFRVogd2l0aGluIHRoZSBBcmdlbnRpbmUtVXJ1Z3VheWFuIENvbW1vbiBGaXNoaW5nIFpvbmUgKFpDUEFVKSwgQ2hpbGUncyBmbGVldCBvcGVyYXRlcyBpbiB0aGUgU291dGggV2VzdCBib3VuZGFyeSBvZiB0aGUgRUVaIGFuZCBpbiB0aGUgZWRnZSBvbiB0aGUgRUVaIGluIHRoZSBjZW50cmFsIHJlZ2lvbi4gQ2hpbmEncyBhY3Rpdml0eSBpcyBsZXNzIGNvbmNlbnRyYXRlZCBidXQgb2NjdXJzIGdlbmVyYWxseSBpbiB0aGUgY2VudHJhbCBhbmQgbm9ydGhlcm4gcG9ydGlvbiBvZiB0aGUgRUVaIChGaWd1cmUgMykKCmBgYHtzcWwsIGNvbm5lY3Rpb24gPSBCUV9jb25uZWN0aW9uLCBvdXRwdXQudmFyID0gImJpbm5lZF9lZXpfZWZmb3J0XzIwMTYiLCBldmFsID0gRn0KU0VMRUNUCiAgRkxPT1IoYS5sYXQqNCkvNCArIC4xMjUgbGF0X2Jpbl9jZW50ZXIsCiAgRkxPT1IoYS5sb24qNCkvNCArIC4xMjUgbG9uX2Jpbl9jZW50ZXIsCiAgYi5mbGFnX2NvdW50cnlfbmFtZSBmbGFnX2NvdW50cnlfbmFtZSwKICBiLmZsYWdfaXNvMyBmbGFnX2lzbzMsCiAgYi5rbm93bl9sYWJlbCBrbm93bl9sYWJlbCwKICBiLmluZmVycmVkX2xhYmVsX2FsbHllYXJzIGluZmVycmVkX2xhYmVsX2FsbHllYXJzLAogIGIuaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMsCiAgRVhBQ1RfQ09VTlRfRElTVElOQ1QoSUYoYS5ubmV0X3Njb3JlID09IDEsIERBVEUodGltZXN0YW1wKSwgTlVMTCkpIGZpc2hpbmdfZGF5cywKICBTVU0oSUYoYS5ubmV0X3Njb3JlID09IDEsIGEuaG91cnMsIDApKSBmaXNoaW5nX2hvdXJzLAogIFNVTShJRihhLm5uZXRfc2NvcmUgPT0gMSwgYS5ob3VycypiLmVuZ2luZV9wb3dlciwgMCkpIGZpc2hpbmdfa3doCkZST00gKAogIFNFTEVDVAogICAgWUVBUih0aW1lc3RhbXApIHllYXIsCiAgICBtbXNpLAogICAgdGltZXN0YW1wLAogICAgc2VnX2lkLAogICAgbG9uLAogICAgbGF0LAogICAgaG91cnMsCiAgICBubmV0X3Njb3JlLAogICAgZWV6X25hbWUKICBGUk9NCiAgICBbd29ybGQtZmlzaGluZy04Mjc6Z2Z3X3Jlc2VhcmNoLm5uXQogIFdIRVJFCiAgICBfUEFSVElUSU9OVElNRSBCRVRXRUVOIFRJTUVTVEFNUCgnMjAxNi0wMS0wMScpCiAgICBBTkQgVElNRVNUQU1QKCcyMDE2LTEyLTMxJykKICAgIEFORCAoZWV6X25hbWUgPT0gIkFyZ2VudGluYSIgT1IgZWV6X25hbWUgPT0gIkZhbGtsYW5kIElzbGFuZHMiKQogICAgQU5EIHNlZ19pZCBJTiAoU0VMRUNUIHNlZ19pZCBGUk9NIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2guZ29vZF9zZWdtZW50c10pCiAgICApIGEKSU5ORVIgSk9JTiAoCiAgU0VMRUNUCiAgICBtbXNpLAogICAgeWVhciwKICAgIGNvdW50cnlfbmFtZSBmbGFnX2NvdW50cnlfbmFtZSwKICAgIGlzbzMgZmxhZ19pc28zLAogICAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgICBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICAgIGtub3duX2xhYmVsLAogICAgSUYoa25vd25fZW5naW5lX3Bvd2VyIElTIE5PVCBOVUxMLCBrbm93bl9lbmdpbmVfcG93ZXIsIGluZmVycmVkX2VuZ2luZV9wb3dlciApIGVuZ2luZV9wb3dlcgogIEZST00KICAgIFtnZndfcmVzZWFyY2gudmVzc2VsX2luZm9fMjAxNzA3MTddCiAgV0hFUkUKICAgIChvbl9maXNoaW5nX2xpc3Rfbm4KICAgICAgT1Igb25fZmlzaGluZ19saXN0KQogICAgQU5EIG9mZnNldHRpbmcgSVMgTlVMTCliCk9OCiAgYS5tbXNpID0gYi5tbXNpCiAgQU5EIGEueWVhciA9IGIueWVhcgpHUk9VUCBCWQogIGxhdF9iaW5fY2VudGVyLAogIGxvbl9iaW5fY2VudGVyLAogIGZsYWdfY291bnRyeV9uYW1lLAogIGZsYWdfaXNvMywKICBrbm93bl9sYWJlbCwKICBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycywKICBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycwpgYGAKCmBgYHtyLCBldmFsID0gRn0Kd3JpdGVfY3N2KGJpbm5lZF9lZXpfZWZmb3J0XzIwMTYsICJzYXZlZF9maWxlcy9iaW5uZWRfZWV6X2VmZm9ydF8yMDE2LmNzdiIpCmBgYAoKYGBge3J9CmFyZ19lZXpfc2YgPC0gc3RfcmVhZCgiZWV6L2FyZ19lZXouc2hwIikKCmFyZ19lZXpfc3AgPC0gYXMoYXJnX2Vlel9zZiwgIlNwYXRpYWwiKQoKYXJnX3NpbXBsZXJfZWV6X3NwIDwtIHJtYXBzaGFwZXI6Om1zX3NpbXBsaWZ5KGFyZ19lZXpfc3AsIGtlZXAgPSAwLjAwMykgIyB0aGlzIGlzIGF3ZXNvbWUhCgphcmdfc2ltcGxlcl9lZXpfc2YgPC0gc3RfYXNfc2YoYXJnX3NpbXBsZXJfZWV6X3NwKQoKZmFsa2xhbmRzX2VleiA8LSBzdF9yZWFkKCJlZXovZmFsa2xhbmRzX2Vlei5zaHAiKQpmYWxrbGFuZHNfZWV6X3NwIDwtIGFzKGZhbGtsYW5kc19lZXosICJTcGF0aWFsIikKCmZhbGtsYW5kc19lZXpfc3AgPC0gcm1hcHNoYXBlcjo6bXNfc2ltcGxpZnkoZmFsa2xhbmRzX2Vlel9zcCwga2VlcCA9IDAuMDAzKSAjIHRoaXMgaXMgYXdlc29tZSEKCmBgYAoKYGBge3IgZmlnLmNhcCA9ICJGaWd1cmUgMi4gRmlzaGluZyBlZmZvcnQgaW4gQXJnZW50aW5hJ3MgRUVaIGluIDIwMTYifQpiaW5uZWRfZWV6X2VmZm9ydF8yMDE2IDwtIHJlYWRfY3N2KCJzYXZlZF9maWxlcy9iaW5uZWRfZWV6X2VmZm9ydF8yMDE2LmNzdiIpCgphcmcgPC0gYyhsZWZ0ID0gLTcwLCBib3R0b20gPSAtNjAsIHJpZ2h0ID0gLTUwLCB0b3AgPSAtMzApCgphcmdfYmFzZW1hcCA8LSBnZXRfc3RhbWVubWFwKGFyZywgem9vbSA9IDcsIG1hcHR5cGUgPSAidGVycmFpbiIpCgphcmdfZ29vZ2xlX21hcCA8LSBnZXRfZ29vZ2xlbWFwKGNlbnRlciA9IGMobG9uID0gLTU1LCBsYXQgPSAtNDUpLCB6b29tID0gNCwgbWFwdHlwZSA9ICJzYXRlbGxpdGUiKQoKKGVmZm9ydF9tYXBfd2l0aF9iYXNlbWFwIDwtIGdnbWFwKGFyZ19iYXNlbWFwKSsKICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoYXJnX3NpbXBsZXJfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICAgIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShmYWxrbGFuZHNfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICBnZW9tX3RpbGUoZGF0YSA9IGJpbm5lZF9lZXpfZWZmb3J0XzIwMTYgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyKSAlPiUgCiAgICAgICAgICAgICAgc3VtbWFyaXplKGZpc2hpbmdfaG91cnMgPSBzdW0oZmlzaGluZ19rd2gsIG5hLnJtID0gVCkvMTAwMCkgJT4lIAogICAgICAgICAgICAgIGZpbHRlcihmaXNoaW5nX2hvdXJzID49IC45KSwKICAgICAgICAgICAgICBhZXMobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyLCBmaWxsID0gZmlzaGluZ19ob3VycyksIAogICAgICAgICAgICAgIGludGVycG9sYXRlID0gRiwgCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHZpcmlkaXM6OnNjYWxlX2ZpbGxfdmlyaWRpcyhuYW1lID0gImZpc2hpbmcgZW5lcmd5IFxuICh0aG91c2FuZCBLV2gpIFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMSwxMCwxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsIDgwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNjYWxlczo6Y29tbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLmhqdXN0ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC50aGVtZSA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDAsIHNpemUgPSA5KSkpKwogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGJyZWFrcyA9IGMoLTY1LC02MCwtNTUpKSsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApKSsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICdncmV5ODAnLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAuNywgMC43LCAwLjcsIDAuNyksICJjbSIpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9ICBlbGVtZW50X3RleHQobWFyZ2luID0gYygwLDAsNSwwLCAiY20iKSwgc2l6ZSA9IHJlbCguNykpLAogICAgICAgIGxlZ2VuZC5rZXkud2lkdGggPSAgdW5pdCguNSwgImNtIiksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSkpCgp0aWZmKCJzYXZlZF9wbG90cy9lZmZvcnRfbWFwX3dpdGhfYmFzZW1hcC50aWZmIiwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gMjAsIHVuaXRzID0gJ2NtJywgY29tcHJlc3Npb24gPSAibHp3IiwgcmVzID0gMzAwKQogICAgCnByaW50KGVmZm9ydF9tYXBfd2l0aF9iYXNlbWFwKQogICAgCmludmlzaWJsZShkZXYub2ZmKCkpCmBgYAoKCmBgYHtyIGZpZy5jYXAgPSAgIkZpZ3VyZSAzLiBGaXNoaW5nIGVmZm9ydCBieSB0aGUgdG9wIDMgZm9yZWlnbiBmbGFnIHN0YXRlcyBpbiAyMDE2In0KKGVmZm9ydF9tYXBfYnlfY291bnRyeV93aXRoX2Jhc2VtYXAgPC0gZ2dtYXAoYXJnX2Jhc2VtYXApKwogIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShhcmdfc2ltcGxlcl9lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYmxhY2snLAogICAgYWxwaGEgPSAwCiAgICApKwogICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoZmFsa2xhbmRzX2Vlel9zcCksCiAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAogICAgZmlsbCA9ICd0cmFuc3BhcmVudCcsCiAgICBjb2xvciA9ICdibGFjaycsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgZ2VvbV90aWxlKGRhdGEgPSBiaW5uZWRfZWV6X2VmZm9ydF8yMDE2ICU+JQogIGZpbHRlcihmbGFnX2NvdW50cnlfbmFtZSAlaW4lIGMoIkFyZ2VudGluYSIsIkNoaWxlIiwgIlVydWd1YXkiLCAiQ2hpbmEiKSkgJT4lIAogIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgZmxhZ19jb3VudHJ5X25hbWUpICU+JSAKICBzdW1tYXJpemUoZmlzaGluZ19ob3VycyA9IHN1bShmaXNoaW5nX2t3aCwgbmEucm0gPSBUKS8xMDAwKSAlPiUgCiAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPj0gLjkpLAogIGFlcyhsb25fYmluX2NlbnRlciwgbGF0X2Jpbl9jZW50ZXIsIGZpbGwgPSBmaXNoaW5nX2hvdXJzKSwgCiAgICAgICAgICAgIGludGVycG9sYXRlID0gRiwgCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHZpcmlkaXM6OnNjYWxlX2ZpbGxfdmlyaWRpcyhuYW1lID0gImZpc2hpbmcgZW5lcmd5IFxuICh0aG91c2FuZCBLV2gpIFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMSwxMCwxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsIDgwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNjYWxlczo6Y29tbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLmhqdXN0ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC50aGVtZSA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDAsIHNpemUgPSA5KSkpKwogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGJyZWFrcyA9IGMoLTY1LC02MCwtNTUpKSsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApKSsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICdncmV5ODAnLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMC43LCAwLjcsIDAuNywgMC43KSwgImNtIiksCiAgICAgICAgbGVnZW5kLnRpdGxlID0gIGVsZW1lbnRfdGV4dChtYXJnaW4gPSBjKDAsMCw1LDAsICJjbSIpLCBzaXplID0gcmVsKC43KSksCiAgICAgICAgbGVnZW5kLmtleS53aWR0aCA9ICB1bml0KC41LCAiY20iKSkrCiAgZmFjZXRfd3JhcCgiZmxhZ19jb3VudHJ5X25hbWUiLCBucm93ID0gMSkpCgp0aWZmKCJzYXZlZF9wbG90cy9lZmZvcnRfbWFwX2J5X2NvdW50cnlfd2l0aF9iYXNlbWFwLnRpZmYiLCBoZWlnaHQgPSAxMiwgd2lkdGggPSAyMCwgdW5pdHMgPSAnY20nLCBjb21wcmVzc2lvbiA9ICJsenciLCByZXMgPSAzMDApCiAgICAKcHJpbnQoZWZmb3J0X21hcF9ieV9jb3VudHJ5X3dpdGhfYmFzZW1hcCkKICAgIAppbnZpc2libGUoZGV2Lm9mZigpKQpgYGAKCkZpc2hpbmcgZWZmb3J0IGJ5IEFyZ2VudGluYSdzIHRyYXdsZXJzIGZsZWV0IGlzIHViaXF1aXRpb3VzIHRocm91Z2hvdXQgdGhlIEVFWiB3aXRoIGxpdHRsZSBlZmZvcnQgb2JzZXJ2ZWQgc291dGggb2YgNTXCulMuIERyaWZ0aW5nIGxvbmdsaW5lcnMgcHJlc2VudCBhIHNpbWlsYXJseSBzcHJlYWQgZGlzdHJpYnV0aW9uIGJ1dCBhcmUgc2xpZ2hseXQgbW9yZSBjb25jZW50cmF0ZWQgaW4gdGhlIGNlbnRyYWwgcmVnaW9uIG9mIHRoZSBFRVouIEVmZm9ydCBieSB0aGUgcHVyc2Ugc2VpbmUgZmxlZXQgaXMgbGltaXRlZCB0byBhIHNtYWxsIHJlZ2lvbiBpbiB0aGUgY2VudGVyIG9mIHRoZSBFRVogYW5kIHRoZSBzcXVpZCBqaWdnaW5nIGZsZWV0IG9wZXJhdGVzIHByZWRvbWludG5hbHkgbm9ydGggb2YgNDfCulMgIChGaWd1cmUgNCkuIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgVXJ1Z3VheWFuIHRyYXdsZXJzLCBmaXNoaW5nIGVmZm9ydCBieSBmb3JlaWduIGZsZWV0cyBzaG93cyBhIG1vcmUgZGlzcGVyc2UgZGlzdHJpYnV0aW9uIHdpdGggc29tZSBob3RzcG90cyBsb2NhdGVkIGluIHRoZSBjZW50cmFsIEVhc3QgYW5kIFNvdXRoIFdlc3QgZWRnZXMgb2YgdGhlIEVFWi4gKEZpZ3VyZSA1LikKCmBgYHtyIGZpZy5jYXAgPSAgIkZpZ3VyZSA0LiBGaXNoaW5nIGVmZm9ydCBvZiB0aGUgQXJnZW50aW5pYW4gZmxlZXQgYnkgZ2VhciB0eXBlIGluIDIwMTYifQooZWZmb3J0X21hcF9ieV9nZWFyX3dpdGhfYmFzZW1hcCA8LSBnZ21hcChhcmdfYmFzZW1hcCkrCiAgZ2VvbV9wb2x5Z29uKAogICAgZGF0YSA9IGJyb29tOjp0aWR5KGFyZ19zaW1wbGVyX2Vlel9zcCksCiAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAogICAgZmlsbCA9ICd0cmFuc3BhcmVudCcsCiAgICBjb2xvciA9ICdibGFjaycsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShmYWxrbGFuZHNfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICBnZW9tX3RpbGUoZGF0YSA9IGJpbm5lZF9lZXpfZWZmb3J0XzIwMTYgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKGluZmVycmVkX2xhYmVsX2FsbHllYXJzICVpbiUgYygicHVyc2Vfc2VpbmVzIiwgInRyYXdsZXJzIiwgImRyaWZ0aW5nX2xvbmdsaW5lcyIsICJzcXVpZF9qaWdnZXIiKSAmIGZsYWdfY291bnRyeV9uYW1lID09ICJBcmdlbnRpbmEiKSAlPiUgCiAgICAgICAgICAgICAgbXV0YXRlKGluZmVycmVkX2xhYmVsX2FsbHllYXJzID0gc3RyaW5ncjo6c3RyX3JlcGxhY2UoaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsICJfIiwgIiAiKSkgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICAgICAgICAgICAgICBzdW1tYXJpemUoZmlzaGluZ19ob3VycyA9IHN1bShmaXNoaW5nX2t3aCwgbmEucm0gPSBUKS8xMDAwKSAlPiUgCiAgICAgICAgICAgICAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPj0gLjkpLAogICAgICAgICAgICBhZXMobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyLCBmaWxsID0gZmlzaGluZ19ob3VycyksIAogICAgICAgICAgICBpbnRlcnBvbGF0ZSA9IEYsIAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IFQpICsKICB2aXJpZGlzOjpzY2FsZV9maWxsX3ZpcmlkaXMobmFtZSA9ICJmaXNoaW5nIGVuZXJneSBcbiAodGhvdXNhbmQgS1doKSBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zID0gImxvZyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDEsMTAsMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLCA4MDAwMDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzY2FsZXM6OmNvbW1hLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAxKSArCiAgbGFicyh4ID0gIkxvbmdpdHVkZSIsCiAgICAgICB5ID0gIkxhdGl0dWRlIikgKwogIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3VyYmFyKHRpdGxlLnBvc2l0aW9uID0gInRvcCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZS5oanVzdCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwudGhlbWUgPSBlbGVtZW50X3RleHQoYW5nbGUgPSAwLCBzaXplID0gOSkpKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBicmVha3MgPSBjKC02NSwtNjAsLTU1KSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSkrCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAnZ3JleTgwJywgbGluZXR5cGUgPSAiZGFzaGVkIiksIAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAuNywgMC43LCAwLjcsIDAuNyksICJjbSIpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9ICBlbGVtZW50X3RleHQobWFyZ2luID0gYygwLDAsNSwwLCAiY20iKSwgc2l6ZSA9IHJlbCguNykpLAogICAgICAgIGxlZ2VuZC5rZXkud2lkdGggPSAgdW5pdCguNSwgImNtIikpKwogIGZhY2V0X3dyYXAoImluZmVycmVkX2xhYmVsX2FsbHllYXJzIiwgbnJvdyA9IDEpKwogIHRoZW1lKHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApKSkKCnRpZmYoInNhdmVkX3Bsb3RzL2VmZm9ydF9tYXBfYnlfZ2Vhcl93aXRoX2Jhc2VtYXAudGlmZiIsIGhlaWdodCA9IDEyLCB3aWR0aCA9IDIwLCB1bml0cyA9ICdjbScsIGNvbXByZXNzaW9uID0gImx6dyIsIHJlcyA9IDMwMCkKICAgIApwcmludChlZmZvcnRfbWFwX2J5X2dlYXJfd2l0aF9iYXNlbWFwKQogICAgCmludmlzaWJsZShkZXYub2ZmKCkpCmBgYAoKYGBge3IgZmlnLmNhcCA9ICAiRmlndXJlIDUuIEZvcmVpZ24gZmlzaGluZyBlZmZvcnQgYnkgZ2VhciB0eXBlIGluIDIwMTYifQooZm9yZWlnbl9lZmZvcnRfbWFwX2J5X2dlYXJfd2l0aF9iYXNlbWFwIDwtIGdnbWFwKGFyZ19iYXNlbWFwKSsKICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoYXJnX3NpbXBsZXJfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICAgZ2VvbV9wb2x5Z29uKAogICAgZGF0YSA9IGJyb29tOjp0aWR5KGZhbGtsYW5kc19lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYmxhY2snLAogICAgYWxwaGEgPSAwCiAgICApKwogIGdlb21fdGlsZShkYXRhID0gYmlubmVkX2Vlel9lZmZvcnRfMjAxNiAlPiUKICAgICAgICAgICAgICBmaWx0ZXIoaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgJWluJSBjKCJwdXJzZV9zZWluZXMiLCAidHJhd2xlcnMiLCAiZHJpZnRpbmdfbG9uZ2xpbmVzIiwgInNxdWlkX2ppZ2dlciIpICYgZmxhZ19jb3VudHJ5X25hbWUgIT0gIkFyZ2VudGluYSIpICU+JSAKICAgICAgICAgICAgICBtdXRhdGUoaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPSBzdHJpbmdyOjpzdHJfcmVwbGFjZShpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycywgIl8iLCAiICIpKSAlPiUgCiAgICAgICAgICAgICAgZ3JvdXBfYnkobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogICAgICAgICAgICAgIHN1bW1hcml6ZShmaXNoaW5nX2hvdXJzID0gc3VtKGZpc2hpbmdfa3doLCBuYS5ybSA9IFQpLzEwMDApICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+PSAuOSksCiAgICAgICAgICAgIGFlcyhsb25fYmluX2NlbnRlciwgbGF0X2Jpbl9jZW50ZXIsIGZpbGwgPSBmaXNoaW5nX2hvdXJzKSwgCiAgICAgICAgICAgIGludGVycG9sYXRlID0gRiwgCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHZpcmlkaXM6OnNjYWxlX2ZpbGxfdmlyaWRpcyhuYW1lID0gImZpc2hpbmcgZW5lcmd5IFxuICh0aG91c2FuZCBLV2gpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMSwxMCwxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsIDgwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNjYWxlczo6Y29tbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLmhqdXN0ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC50aGVtZSA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDAsIHNpemUgPSA5KSkpKwogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksYnJlYWtzID0gYygtNjUsLTYwLC01NSkpKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gJ2dyZXk4MCcsIGxpbmV0eXBlID0gImRhc2hlZCIpLCAKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2KSwKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYygwLjcsIDAuNywgMC43LCAwLjcpLCAiY20iKSwKICAgICAgICBsZWdlbmQudGl0bGUgPSAgZWxlbWVudF90ZXh0KG1hcmdpbiA9IGMoMCwwLDUsMCwgImNtIiksIHNpemUgPSByZWwoLjcpKSwKICAgICAgICBsZWdlbmQua2V5LndpZHRoID0gIHVuaXQoLjUsICJjbSIpKSsKICBmYWNldF93cmFwKCJpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyIsIG5yb3cgPSAxKSsKICB0aGVtZShzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSkpCgp0aWZmKCJzYXZlZF9wbG90cy9mb3JlaWduX2VmZm9ydF9tYXBfYnlfZ2Vhcl93aXRoX2Jhc2VtYXAudGlmZiIsIGhlaWdodCA9IDEyLCB3aWR0aCA9IDIwLCB1bml0cyA9ICdjbScsIGNvbXByZXNzaW9uID0gImx6dyIsIHJlcyA9IDMwMCkKICAgIApwcmludChmb3JlaWduX2VmZm9ydF9tYXBfYnlfZ2Vhcl93aXRoX2Jhc2VtYXApCiAgICAKaW52aXNpYmxlKGRldi5vZmYoKSkKYGBgCgojIEVmZm9ydCB3aXRoaW4gdGhlIGNvbnNpZGVyZWQgRHJha2UgTVBBCgpgYGB7ciBsb2FkX2RyYWtlX3NocH0KZHJha2Vfc2YgPC0gc3RfcmVhZCgiZWV6L2RyYWtlLnNocCIpCgpkcmFrZV9lZXpfc3AgPC0gYXMoZHJha2Vfc2YsICJTcGF0aWFsIikKCnNvdXRoX2Vlel9zZiA8LSBzdF9yZWFkKCJlZXovc291dGhfc2VjdGlvbl9lZXouc2hwIikKCnNvdXRoX2Vlel9zcCA8LSBhcyhzb3V0aF9lZXpfc2YsICJTcGF0aWFsIikKCnNvdXRoX3NpbXBsZXJfZWV6X3NwIDwtIHJtYXBzaGFwZXI6Om1zX3NpbXBsaWZ5KHNvdXRoX2Vlel9zcCwga2VlcCA9IDAuMDAzKSAjIHRoaXMgaXMgYXdlc29tZSEKCnNvdXRoX3NpbXBsZXJfZWV6X3NmIDwtIHN0X2FzX3NmKHNvdXRoX3NpbXBsZXJfZWV6X3NwKQpgYGAKCmBgYHtzcWwgY29ubmVjdGlvbiA9IEJRX2Nvbm5lY3Rpb24sIG91dHB1dC52YXIgPSAiYWxsX3Bvc2l0aW9uc19pbl9kcmFrZSIsIGV2YWwgPSBGfQpTRUxFQ1QKICBhLnllYXIgeWVhciwKICBhLnRpbWVzdGFtcCB0aW1lc3RhbXAsCiAgYS5sYXQgbGF0LAogIGEubG9uIGxvbiwKICBhLm1tc2kgbW1zaSwKICBiLmZsYWdfY291bnRyeV9uYW1lIGZsYWdfY291bnRyeV9uYW1lLAogIGIuZmxhZ19pc28zIGZsYWdfaXNvMywKICBiLmtub3duX2xhYmVsIGtub3duX2xhYmVsLAogIGIuaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgYi5pbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycyBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICBiLmVuZ2luZV9wb3dlciwKICBhLm5uZXRfc2NvcmUgbm5ldF9zY29yZSwKICBhLmhvdXJzIGhvdXJzLCAKRlJPTSAoCiAgU0VMRUNUCiAgICBZRUFSKHRpbWVzdGFtcCkgeWVhciwKICAgIG1tc2ksCiAgICB0aW1lc3RhbXAsCiAgICBzZWdfaWQsCiAgICBsb24sCiAgICBsYXQsCiAgICBob3VycywKICAgIG5uZXRfc2NvcmUsCiAgICBlZXpfbmFtZQogIEZST00KICAgIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2gubm5dCiAgV0hFUkUKICAgIF9QQVJUSVRJT05USU1FIEJFVFdFRU4gVElNRVNUQU1QKCcyMDE0LTAxLTAxJykKICAgIEFORCBUSU1FU1RBTVAoJzIwMTYtMTItMzEnKQogICAgQU5EIHNlZ19pZCBJTiAoU0VMRUNUIHNlZ19pZCBGUk9NIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2guZ29vZF9zZWdtZW50c10pCiAgICBBTkQgZWV6X25hbWUgPT0gIkFyZ2VudGluYSIgYW5kIGRpc3RhbmNlX2Zyb21fc2hvcmUgPiAxMioxODUyIGFuZCBsb24gPD0gLTY0IGFuZCBsYXQgPCAtIDU1KSBhCklOTkVSIEpPSU4gKAogIFNFTEVDVAogICAgbW1zaSwKICAgIHllYXIsCiAgICBjb3VudHJ5X25hbWUgZmxhZ19jb3VudHJ5X25hbWUsCiAgICBpc28zIGZsYWdfaXNvMywKICAgIGluZmVycmVkX2xhYmVsX2FsbHllYXJzLAogICAgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMsCiAgICBrbm93bl9sYWJlbCwKICAgIElGKGtub3duX2VuZ2luZV9wb3dlciBJUyBOT1QgTlVMTCwga25vd25fZW5naW5lX3Bvd2VyLCBpbmZlcnJlZF9lbmdpbmVfcG93ZXIgKSBlbmdpbmVfcG93ZXIKICBGUk9NCiAgICBbZ2Z3X3Jlc2VhcmNoLnZlc3NlbF9pbmZvXzIwMTcwNzE3XQogIFdIRVJFCiAgICAob25fZmlzaGluZ19saXN0X25uCiAgICAgIE9SIG9uX2Zpc2hpbmdfbGlzdCkKICAgIEFORCBvZmZzZXR0aW5nIElTIE5VTEwpYgpPTgogIGEubW1zaSA9IGIubW1zaQogIEFORCBhLnllYXIgPSBiLnllYXIKYGBgCgpgYGB7ciBzYXZlX2RyYWtlX3Bvc2l0aW9ucywgZXZhbCA9IEZ9CndyaXRlX2NzdihhbGxfcG9zaXRpb25zX2luX2RyYWtlLCAic2F2ZWRfZmlsZXMvYWxsX3Bvc2l0aW9uc19pbl9kcmFrZS5jc3YiKQpgYGAKCmBgYHtyIGZpbHRlcl9vdXRfMTJubX0KYWxsX3Bvc2l0aW9uc19pbl9kcmFrZSA8LSByZWFkX2Nzdigic2F2ZWRfZmlsZXMvYWxsX3Bvc2l0aW9uc19pbl9kcmFrZS5jc3YiKQoKYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9zcCA8LSBhbGxfcG9zaXRpb25zX2luX2RyYWtlCgpzcDo6Y29vcmRpbmF0ZXMoYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9zcCkgPC0gYygibG9uIiwgImxhdCIpCgpzcDo6cHJvajRzdHJpbmcoYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9zcCkgPC0gc3A6OnByb2o0c3RyaW5nKGRyYWtlX2Vlel9zcCkKCmJleW9uZF8xMl9ubSA8LSBhbGxfcG9zaXRpb25zX2luX2RyYWtlX3NwWyFpcy5uYShzcDo6b3ZlcihhbGxfcG9zaXRpb25zX2luX2RyYWtlX3NwLCBhcyhkcmFrZV9lZXpfc3AsICJTcGF0aWFsUG9seWdvbnMiKSkpLF0KCmFsbF9wb3NpdGlvbnNfaW5fZHJha2VfYmV5b25kXzEybm0gPC0gY2JpbmQoYmV5b25kXzEyX25tQGNvb3JkcywgYmV5b25kXzEyX25tQGRhdGEpCmBgYAoKYGBge3IgZ3JvdXBfYnlfbW1zaX0KZWZmb3J0X2luX2RyYWtlX2JleW9uZF8xMm5tX2J5X21tc2kgPC0gYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9iZXlvbmRfMTJubSAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgbW1zaSwgZmxhZ19jb3VudHJ5X25hbWUsIGZsYWdfaXNvMywgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpemUoZGF5cyA9IG5fZGlzdGluY3QoZGF0ZSh0aW1lc3RhbXApKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzID0gbl9kaXN0aW5jdChkYXRlKHRpbWVzdGFtcFtubmV0X3Njb3JlID09IDEgXSkpLAogICAgICAgICAgICBmaXNoaW5nX2hvdXJzID0gc3VtKGhvdXJzW25uZXRfc2NvcmUgPT0gMV0sIG5hLnJtID0gVCksCiAgICAgICAgICAgIGZpc2hpbmdfa3doID0gc3VtKGhvdXJzKmJfZW5naW5lX3Bvd2VyW25uZXRfc2NvcmUgPT0gMV0sIG5hLnJtID0gVCkpCmBgYAoKV2l0aGluIHRoZSBjb25zaWRlcmVkIERyYWtlIE1hcmluZSBQcm90ZWN0ZWQgQXJlYSwgd2UgYXJlIGFibGUgdG8gb2JzZXJ2ZSBgciBuX2Rpc3RpbmN0KGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSwgZmlzaGluZ19ob3VycyA+IDEpJG1tc2kpYCB2ZXNzZWxzIGZpc2hpbmcgYmV0d2VlbiAyMDE0LTIwMTYuIE9mIHRoZXNlLCBgciBuX2Rpc3RpbmN0KGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSwgZmlzaGluZ19ob3VycyA+IDEsIGZsYWdfaXNvMyA9PSAiQVJHIikkbW1zaSlgIEFyZ2VudGluaWFuIHZlc3NlbHMgKDQgdHJhd2xlcnMgYW5kIDEgbG9uZ2xpbmVyKSBhY2NvdW50IGZvciBgciAxMDAqc3VtKGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSxmbGFnX2lzbzMgPT0gIkFSRyIpJGZpc2hpbmdfa3doKS9zdW0oZmlsdGVyKGVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpKSRmaXNoaW5nX2t3aClgIG9mIGFsbCBvYnNlcnZlZCBlZmZvcnQgKFRhYmxlIDQpLiBUd28gQ2hpbGVhbiB2ZXNzZWxzIGFuZCBvbmUgS29yZWFuIHZlc3NlbCBhY2NvdW50IGZvciBsZXNzIHRoYW4gMSUgb2YgdGhlIGVmZm9ydCBhbmQgY29sbGVjdGl2ZWx5IHNwZW50IG9ubHkgNyBmaXNoaW5nIGRheXMgaW4gMjAxNiAoVGFibGUgNCkuIAoKYGBge3J9CmVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpICU+JSAKICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+IDEpICU+JSAKICBncm91cF9ieSh5ZWFyKSAlPiUgCiAgc3VtbWFyaXNlKGFsbF92ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgYXJnX3Zlc3NlbHMgPSBuX2Rpc3RpbmN0KG1tc2lbZmxhZ19pc28zID09ICJBUkciXSksCiAgICAgICAgICAgIGZpc2hpbmdfZGF5c19hbGwgPSBzdW0oZmlzaGluZ19kYXlzKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzX2FyZyA9IHN1bShmaXNoaW5nX2RheXNbZmxhZ19jb3VudHJ5X25hbWUgPT0gJ0FyZ2VudGluYSddKSwKICAgICAgICAgICAgZmlzaGluZ19lbmVyZ3kgPSByb3VuZChzdW0oZmlzaGluZ19rd2gsIG5hLnJtID0gVCkvMTBeNiwgMiksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5X2FyZyA9IHJvdW5kKHN1bShmaXNoaW5nX2t3aFtmbGFnX2NvdW50cnlfbmFtZSA9PSAnQXJnZW50aW5hJ10pLzEwXjYsIGRpZ2l0cyA9IDIpKSAlPiUgCiAga2FibGUoY2FwdGlvbiA9ICJ0YWJsZSA0LiBGaXNoaW5nIHZlc3NlbHMgYW5kIEZpc2hpbmcgZGF5cyBpbiB0aGUgY29uc2lkZXJlZCBEcmFrZSBwcm90ZWN0ZWQgYXJlYSAoMjAxNC0yMDE2KSIsCiAgICAgICAgY29sLm5hbWVzID0gYygiWWVhciIsICJUb3RhbCB2ZXNzZWxzIiwgIkFyZ2VudGluaWFuIHZlc3NlbHMiLCAiVG90YWwgZmlzaGluZyBkYXlzIiwgIkFyZ2VudGluaWFuIGZpc2hpbmcgZGF5cyIsICJGaXNoaW5nIGVuZXJneSAobWlsbGlvbiBLV2gpIiwgIkFyZ2VudGluYSBmaXNoaW5nIGVuZXJneSAobWlsbGlvbiBLV2gpIikpCmBgYAoKYGBge3J9CmVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpICU+JQogIGZpbHRlcihmaXNoaW5nX2hvdXJzID4gMSAmIHllYXIgPT0gMjAxNikgJT4lIAogIGdyb3VwX2J5KGZsYWdfY291bnRyeV9uYW1lLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogIHN1bW1hcmlzZSh2ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzID0gc3VtKGZpc2hpbmdfZGF5cyksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF4zLCAyKSkgJT4lIAogIGFycmFuZ2UoZGVzYyhmaXNoaW5nX2VuZXJneSkpICU+JSAKICBrYWJsZShjYXB0aW9uID0gInRhYmxlIDUuIEZpc2hpbmcgdmVzc2VscyBhbmQgZWZmb3J0IGJ5IGNvdW50cnkgYW5kIGdlYXIgdHlwZSBpbiB0aGUgY29uc2lkZXJlZCBEcmFrZSBNUEEgKDIwMTYpIiwKICAgICAgICBjb2wubmFtZXMgPSBjKCJGbGFnIHN0YXRlIiwgIkdlYXIgdHlwZSIsICJWZXNzZWxzIiwgIkZpc2hpbmcgZGF5cyIsICAiRmlzaGluZyBlbmVyZ3kgKHRob3VzYW5kIEtXaCkiKSkKYGBgCgpUaGVzZSByZXN1bHRzIHN1Z2dlc3QgdGhhdCBhIHZlcnkgc21hbGwgZnJhY3Rpb24gb2YgQXJnZW50aW5hJ3MgZmxlZXQgb3BlcmF0ZXMgaW4gdGhlIGFyZWEgY29uc2lkZXJlZCBmb3IgcHJvdGVjdGlvbi4gU3BlY2lmaWNhbGx5LCBvbmx5IGByIDEwMCpuX2Rpc3RpbmN0KGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSwgZmlzaGluZ19ob3VycyA+IDEsIGZsYWdfaXNvMyA9PSAiQVJHIiwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gInRyYXdsZXJzIikkbW1zaSkvbl9kaXN0aW5jdChmaWx0ZXIoYWxsX2VmZm9ydF9pbl9FRVosIGZsYWdfaXNvMyA9PSAiQVJHIiwgeWVhciA9PSAyMDE2LCAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gInRyYXdsZXJzIikkbW1zaSlgICUgb2YgYWxsIEFyZ2VudGluaWFuIHRyYXdsZXJzIGFuZCBgciAxMDAqbl9kaXN0aW5jdChmaWx0ZXIoZWZmb3J0X2luX2RyYWtlX2JleW9uZF8xMm5tX2J5X21tc2ksIGZsYWdfaXNvMyA9PSAiQVJHIiwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gImRyaWZ0aW5nX2xvbmdsaW5lcyIsIGZpc2hpbmdfaG91cnMgPiAxKSRtbXNpKS9uX2Rpc3RpbmN0KGZpbHRlcihhbGxfZWZmb3J0X2luX0VFWiwgZmxhZ19pc28zID09ICJBUkciLCB5ZWFyID09IDIwMTYsICBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyA9PSAiZHJpZnRpbmdfbG9uZ2xpbmVzIikkbW1zaSlgICUgb2YgbG9uZ2xpbmVycyBmaXNoIGluIHRoZSByZWdpb24uIFRoZSBlZmZvcnQgYnkgdGhlc2UgdmVzc2VscyByZXByZXNlbnRzIG9ubHkgYHIgMTAwKnN1bShmaWx0ZXIoZWZmb3J0X2luX2RyYWtlX2JleW9uZF8xMm5tX2J5X21tc2ksIGZsYWdfaXNvMyA9PSAiQVJHIiwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gInRyYXdsZXJzIiwgeWVhciA9PSAyMDE2KSRmaXNoaW5nX2t3aCkvc3VtKGZpbHRlcihhbGxfZWZmb3J0X2luX0VFWiwgZmxhZ19pc28zID09ICJBUkciLCB5ZWFyID09IDIwMTYsICBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyA9PSAidHJhd2xlcnMiKSRmaXNoaW5nX2t3aClgICUgYW5kIGByIDEwMCpzdW0oZmlsdGVyKGVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpLCBmbGFnX2lzbzMgPT0gIkFSRyIsIGluZmVycmVkX2xhYmVsX2FsbHllYXJzID09ICJkcmlmdGluZ19sb25nbGluZXMiLCB5ZWFyID09IDIwMTYpJGZpc2hpbmdfa3doKS9zdW0oZmlsdGVyKGFsbF9lZmZvcnRfaW5fRUVaLCBmbGFnX2lzbzMgPT0gIkFSRyIsIHllYXIgPT0gMjAxNiwgIGluZmVycmVkX2xhYmVsX2FsbHllYXJzID09ICJkcmlmdGluZ19sb25nbGluZXMiKSRmaXNoaW5nX2t3aClgICUgb2YgYWxsIGVmZm9ydCBieSBBcmdlbnRpYW4gdHJhd2xlcnMgYW5kIGxvbmdsaW5lcnMsIHJlc3BlY3RpdmVseS4gCgoKYGBge3J9CmFsbF9lZmZvcnRfaW5fRUVaICU+JSAKICBmaWx0ZXIoZmxhZ19pc28zID09ICJBUkciLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyAlaW4lIGMoInRyYXdsZXJzIiwgImRyaWZ0aW5nX2xvbmdsaW5lcyIpKSAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpc2UodmVzc2VscyA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF42LDIpKSAlPiUgCiAgbGVmdF9qb2luKGVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpICU+JSAKICBmaWx0ZXIoZmxhZ19pc28zID09ICJBUkciLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyAlaW4lIGMoInRyYXdsZXJzIiwgImRyaWZ0aW5nX2xvbmdsaW5lcyIpKSAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpc2UodmVzc2Vsc19pbl9kcmFrZSA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5X2luX2RyYWtlID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF42LDIpKSkgJT4lIAogIG11dGF0ZShwX3Zlc3NlbHMgPSAxMDAqdmVzc2Vsc19pbl9kcmFrZS92ZXNzZWxzLAogICAgICAgICBwX2VuZXJneSA9IDEwMCpmaXNoaW5nX2VuZXJneV9pbl9kcmFrZS9maXNoaW5nX2VuZXJneSkgJT4lIAogIHNlbGVjdCh5ZWFyLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycywgdmVzc2VscywgdmVzc2Vsc19pbl9kcmFrZSxwX3Zlc3NlbHMsIGV2ZXJ5dGhpbmcoKSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgMikgJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgNi4gRnJhY3Rpb24gb2YgZmxlZXQgYW5kIGZpc2hpbmcgZWZmb3J0ICh0aG91c2FuZCBLV2gpIGJ5IGdlYXIgdHlwZSB3aXRoaW4gdGhlIGNvbnNpZGVyZWQgcHJvdGVjdGVkIGFyZWEgKDIwMTQtMjAxNikiLAogICAgICAgIGNvbC5uYW1lcyA9IGMoIlllYXIiLCAiR2VhciB0eXBlIiwgIkFsbCB2ZXNzZWxzIGluIEVFWiIsICJWZXNzZWxzIGluIERyYWtlIiwgIiUgb2YgdmVzc2VscyIsICJBbGwgZmlzaGluZyBlbmVyZ3kgaW4gRUVaIiwgIkZpc2hpbmcgZW5lcmd5IGluIERyYWtlIiwgIiUgZmlzaGluZyBlbmVyZ3kiKSkKYGBgCgoKYGBge3J9CmJpbm5lZF9kcmFrZV9lZmZvcnRfMjAxNl8xMl9ubSA8LSBhbGxfcG9zaXRpb25zX2luX2RyYWtlX2JleW9uZF8xMm5tICU+JSAKICBmaWx0ZXIobm5ldF9zY29yZSA9PSAxICYgeWVhciA9PSAyMDE2KSAlPiUgCiAgbXV0YXRlKGxhdF9iaW5fY2VudGVyID0gZmxvb3IobGF0KjgpLzgsCiAgICAgICAgIGxvbl9iaW5fY2VudGVyID0gZmxvb3IobG9uKjgpLzgpICU+JSAKICBncm91cF9ieShsb25fYmluX2NlbnRlciwgbGF0X2Jpbl9jZW50ZXIsIGZsYWdfY291bnRyeV9uYW1lLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogIHN1bW1hcmlzZShmaXNoaW5nX2hvdXJzID0gc3VtKGhvdXJzKSwKICAgICAgICAgICAgZmlzaGluZ19lbmVyZ3kgPSBzdW0oaG91cnMqYl9lbmdpbmVfcG93ZXIpKQpgYGAKCgpgYGB7ciBmaWcuY2FwID0gIkZpZ3VyZSBmLiBEb21lc3RpYyBGaXNoaW5nIGVmZm9ydCBpbiB0aGUgY29uc2lkZXJlZCBEcmFrZSBwcm90ZWN0ZWQgYXJlYSBpbiAyMDE2In0KZHJha2VfZ29vZ2xlX21hcCA8LSBnZXRfZ29vZ2xlbWFwKGNlbnRlciA9IGMobG9uID0gLTY0LjUsIGxhdCA9IC01Ni42KSwgem9vbSA9IDcsIG1hcHR5cGUgPSAic2F0ZWxsaXRlIikKCihlZmZvcnRfbWFwX2luX0RyYWtlIDwtIGdnbWFwKGRyYWtlX2dvb2dsZV9tYXApKwogIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShkcmFrZV9lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnZ29sZCcsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgZ2VvbV90aWxlKGRhdGEgPSBiaW5uZWRfZHJha2VfZWZmb3J0XzIwMTZfMTJfbm0gJT4lIAogICAgICAgICAgICAgIGZpbHRlcihmbGFnX2NvdW50cnlfbmFtZSA9PSAiQXJnZW50aW5hIiAmIGZpc2hpbmdfaG91cnMgPiAuOSkgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpLCAKICAgICAgICAgICAgYWVzKGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgZmlsbCA9IGZpc2hpbmdfaG91cnMpLCAKICAgICAgICAgICAgaW50ZXJwb2xhdGUgPSBGLCAKICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBUKSArCiAgdmlyaWRpczo6c2NhbGVfZmlsbF92aXJpZGlzKG5hbWUgPSAiZmlzaGluZyBlbmVyZ3kgXG4gKEtXaCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9ICJsb2ciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygxLDEwLDUwLDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwgODAwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2NhbGVzOjpjb21tYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gMSkgKwogIGxhYnMoeCA9ICJMb25naXR1ZGUiLAogICAgICAgeSA9ICJMYXRpdHVkZSIpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG91cmJhcih0aXRsZS5wb3NpdGlvbiA9ICJ0b3AiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuaGp1c3QgPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLnRoZW1lID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMCwgc2l6ZSA9IDkpKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoLTY3LC02NiwtNjUsLTY0KSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSkrCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAnZ3JleTgwJywgbGluZXR5cGUgPSAiZGFzaGVkIiksIAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYygwLjcsIDAuNywgMC43LCAwLjcpLCAiY20iKSwKICAgICAgICBsZWdlbmQudGl0bGUgPSAgZWxlbWVudF90ZXh0KG1hcmdpbiA9IGMoMCwwLDUsMCwgImNtIiksIHNpemUgPSByZWwoLjkpKSwKICAgICAgICBsZWdlbmQua2V5LndpZHRoID0gIHVuaXQoLjUsICJjbSIpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOSkpKwogIGZhY2V0X3dyYXAoImluZmVycmVkX2xhYmVsX2FsbHllYXJzIikpCgp0aWZmKCJzYXZlZF9wbG90cy9lZmZvcnRfbWFwX2luX0RyYWtlLnRpZmYiLCBoZWlnaHQgPSAxMiwgd2lkdGggPSAyMCwgdW5pdHMgPSAnY20nLCBjb21wcmVzc2lvbiA9ICJsenciLCByZXMgPSAzMDApCiAgICAKcHJpbnQoZWZmb3J0X21hcF9pbl9EcmFrZSkKICAgIAppbnZpc2libGUoZGV2Lm9mZigpKQpgYGAKCgojIyBPdmVybGFwIGVmZm9yIG1hcCB3aXRoIGFsbCBNUEFzCgpgYGB7cn0KQU1QX3Y1IDwtIHN0X3JlYWQoIkFNUFNfc2hhcGVmaWxlcy9BTVBzXzVfdjEuc2hwIikKCkFNUF92NV9zcCA8LSBhcyhBTVBfdjUsICJTcGF0aWFsIikKYGBgCgoKYGBge3J9CihlZmZvcnRfbWFwX3dpdGhfYWxsX01QQXMgPC0gZ2dtYXAoYXJnX2Jhc2VtYXApKwogIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShhcmdfc2ltcGxlcl9lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYmxhY2snLAogICAgYWxwaGEgPSAwCiAgICApKwogICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoZmFsa2xhbmRzX2Vlel9zcCksCiAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAogICAgZmlsbCA9ICd0cmFuc3BhcmVudCcsCiAgICBjb2xvciA9ICdibGFjaycsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgZ2VvbV90aWxlKGRhdGEgPSBiaW5uZWRfZWV6X2VmZm9ydF8yMDE2ICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlcikgJT4lIAogICAgICAgICAgICAgIHN1bW1hcml6ZShmaXNoaW5nX2hvdXJzID0gc3VtKGZpc2hpbmdfa3doLCBuYS5ybSA9IFQpLzEwMDApICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+PSAuOSksCiAgICAgICAgICAgICAgYWVzKGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgZmlsbCA9IGZpc2hpbmdfaG91cnMpLCAKICAgICAgICAgICAgICBpbnRlcnBvbGF0ZSA9IEYsIAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IFQpICsKICAgIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShBTVBfdjVfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYXF1YW1hcmluZScsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgdmlyaWRpczo6c2NhbGVfZmlsbF92aXJpZGlzKG5hbWUgPSAiZmlzaGluZyBlbmVyZ3kgXG4gKHRob3VzYW5kIEtXaCkgXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9ICJsb2ciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygxLDEwLDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwgODAwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2NhbGVzOjpjb21tYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gMSkgKwogIGxhYnMoeCA9ICJMb25naXR1ZGUiLAogICAgICAgeSA9ICJMYXRpdHVkZSIpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG91cmJhcih0aXRsZS5wb3NpdGlvbiA9ICJ0b3AiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuaGp1c3QgPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLnRoZW1lID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMCwgc2l6ZSA9IDkpKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgYnJlYWtzID0gYygtNjUsLTYwLC01NSkpKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gJ2dyZXk4MCcsIGxpbmV0eXBlID0gImRhc2hlZCIpLCAKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMC43LCAwLjcsIDAuNywgMC43KSwgImNtIiksCiAgICAgICAgbGVnZW5kLnRpdGxlID0gIGVsZW1lbnRfdGV4dChtYXJnaW4gPSBjKDAsMCw1LDAsICJjbSIpLCBzaXplID0gcmVsKC43KSksCiAgICAgICAgbGVnZW5kLmtleS53aWR0aCA9ICB1bml0KC41LCAiY20iKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpKSkKYGBgCgoKYGBge3J9CnRpZmYoInNhdmVkX3Bsb3RzL2VmZm9ydF9tYXBfd2l0aF9hbGxfTVBBcy50aWZmIiwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gMjAsIHVuaXRzID0gJ2NtJywgY29tcHJlc3Npb24gPSAibHp3IiwgcmVzID0gMzAwKQogICAgCnByaW50KGVmZm9ydF9tYXBfd2l0aF9hbGxfTVBBcykKICAgIAppbnZpc2libGUoZGV2Lm9mZigpKQpgYGAKCg==